package testenum

import (
	"yunj/pkg/yunj/core/enum"
)

// 此处不自定义类型，防止数据库占位符?替换为字符串，在mysql进行匹配时发生类型转换

// 定义常量
const (
	// 正常
	NORMAL uint8 = 11

	// 回收站
	RECYLE_BIN uint8 = 22

	// 已删除
	DELETED uint8 = 33
)

// 实现EnumInerface接口
type Test struct {
	enum.Enum[uint8]
}

// Test.GetInstance().GetDescMap()
func (e *Test) AllConstAttrs() map[uint8]map[string]any {
	return map[uint8]map[string]any{
		NORMAL: {
			"desc":  "正常",
			"sort":  1,
			"color": "#16baaa",
		},
		RECYLE_BIN: {
			"desc":  "回收站",
			"sort":  2,
			"color": "#ffb800",
		},
		DELETED: {
			"desc":  "已删除",
			"sort":  3,
			"color": "#ff5722",
		},
	}
}

// instanceCache 存储已经创建的实例
var instanceCache = make(map[uint8]*Test)

// 创建枚举
// 根据value获取枚举
func ByValue(value uint8) *Test {
	if instance, exists := instanceCache[value]; exists {
		return instance
	}
	e := &Test{}
	enum.SetEnumInstance(&e.Enum, e, value)
	instanceCache[value] = e
	return e
}

var Enum *Test = func() *Test {
	e := &Test{}
	enum.SetEnumInstance(&e.Enum, e)
	return e
}()

// 使用示例
// te := testenum.ByValue(testenum.NORMAL)
// qw, ok := testenum.Enum.IsValue("11")
// fmt.Printf("111|%v|222|%v|333|%v|444|%v\r\n", te.GetValue(), qw, ok, testenum.Enum.GetSortConsts())
